const fs = require('fs')
const isProd = process.env.NODE_ENV === 'production'
var pagesRootPath = 'src/pages' // 单页面入口文件
var moduleRootPath = 'src/module' // 多页面入口文件
var moduleTemplate = 'htmlTemplate' // 出口文件
let moduleInfo = null
var projectname = process.argv.slice(3)

exports.discriminate = function () {
  try {
    console.log('检测是否是多系统')
    var file = fs.readdirSync(pagesRootPath)
    return {
      'singleEntry':
      {
        // page的入口
        entry: 'src/main.js',
        // 模板来源
        template: moduleTemplate + '/index.html',
        // 在 dist/index.html 的输出
        filename: 'index.html',
        chunks: ['chunk-vendors', 'chunk-common', 'chunk-antd', 'singleEntry']
      }
    }
  } catch (error) {
    return this.getEntries()
  }
}
exports.getEntries = function getEntries () {
  if (isProd) {
    return entriesFnc()
  }
  if (!isProd && projectname.length) {
    return entriesFnc()
  }
  // 初始化模块列表
  this.getModuleInfo()
  return moduleInfo
}
function entriesFnc () {
  const entries = {}
  projectname.map(i => {
    entries[i] = {
      // page的入口
      entry: 'src/module/' + i + '/main.js',
      // 模板来源
      template: moduleTemplate + '/' + i + '.html',
      // 在 dist/index.html 的输出
      filename: isProd ? 'index.html' : i + '.html',
      chunks: ['chunk-vendors', 'chunk-common', 'chunk-antd', i]
    }
  })
  return entries
}
exports.getModuleInfo = function getModuleInfo () {
  // 判断是否为空，不为空则直接返回
  if (moduleInfo) {
    return moduleInfo
  } else {
    // 为空则读取列表
    moduleInfo = {}
    readDirSync(moduleRootPath, moduleTemplate, '', true)
    return moduleInfo
  }
}
/**
 * 深度遍历目录，并整理多页面模块
 * @param path 需要变量的路径
 * @param moduleName 模块名称
 */
function readDirSync (path, temPath, moduleName, nextLevel) {
  // 缓存模块对象
  var moduleObj = {
    entry: '',
    template: '',
    filename: '',
    chunks: []
  }
  // 获取当前模块ID
  var moduleID = path.replace(moduleRootPath + '/', '')
  if (path === moduleRootPath) {
    moduleID = ''
  }
  // 获取目录下所有文件及文件夹
  var pa = fs.readdirSync(path)
  pa.forEach(function (ele) {
    var info = fs.statSync(path + '/' + ele)
    if (info.isDirectory()) {
      nextLevel && readDirSync(path + '/' + ele, temPath + '/' + ele, ele, false)
    } else {
      // 判断当前模块的js是否存在
      if (ele === 'main.js') {
        moduleObj.entry = path + '/' + ele
        moduleObj.template = moduleTemplate + '/' + moduleID + '.html'
        moduleObj.filename = moduleID + '.html'
        moduleObj.chunks = ['chunk-vendors', 'chunk-common', 'chunk-antd', moduleID]
      }
    }
  })
  // 判断模块是否真实(可能只是个分级目录)
  if (
    (moduleObj.moduleID !== '' && moduleObj.moduleHTML !== '') ||
    (moduleObj.moduleID !== '' && moduleObj.moduleJS !== '')
  ) {
    if (moduleID) {
      moduleInfo[moduleID] = moduleObj
    }
  }
}
